package com.uade.business;

import java.util.List;

import javax.naming.NamingException;

import com.uade.facade.Facade;
import com.uade.model.Articulo;
import com.uade.model.Compra;
import com.uade.model.Configuracion;
import com.uade.model.Ranking;
import com.uade.model.Usuario;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LoginException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.model.exceptions.NotFoundException;

/**
 * Implementacion de la comunicacion con el servidor remoto
 * 
 * @author Francisco
 * 
 */
public class BusinessDelegateImpl implements BusinessDelegate {

	private Facade facade;

	public static BusinessDelegate getInstance() throws NamingException {
		return new BusinessDelegateImpl();
	}

	private BusinessDelegateImpl() throws NamingException {
		facade = ServiceLocator.getRemoteFacadeB();
	}

	// Usuario
	@Override
	public Usuario loguearse(String nombre, String password)
			throws LoginException {
		return facade.loguearse(nombre, password);
	}

	@Override
	public void altaUsuario(Usuario usuario) {
		facade.altaUsuario(usuario);
	}

	// Articulo
	@Override
	public List<Articulo> listarArticulosPorRanking() throws NotFoundException {
		return facade.listarArticulosPorRanking();
	}

	@Override
	public List<Articulo> busqueda(String nombre, String categoria)
			throws NotFoundException {
		return facade.busqueda(nombre, categoria);
	}

	@Override
	public Articulo busqueda(int id) throws NotFoundException {
		return facade.busqueda(id);
	}

	@Override
	public void modificarConfiguracion(Configuracion configuracion) {
		facade.modificarConfiguracion(configuracion);
	}

	@Override
	public List<Configuracion> obtenerConfiguraciones() {
		return facade.obtenerConfiguraciones();
	}

	@Override
	public List<Compra> consultaCompras(int idUsuario) {
		return facade.consultaCompras(idUsuario);
	}

	@Override
	public void actualizarRanking(Ranking ranking) throws NotFoundException {
		facade.actualizarRanking(ranking);
	}

	@Override
	public void recepcionEstado(String estado, int idCompra) throws NotFoundException {
		facade.recepcionEntrega(estado, idCompra);
	}

	@Override
	public long checkOutCompra(Compra compr) throws BusinessException,
			LogisticaMonitoreoException {
		return  facade.checkOutCompra(compr);
	}

	@Override
	public Configuracion obtenerConfiguracionLogisticaMonitoreoVenta() {

		return facade.obtenerConfiguracionLMVenta();
	}

	@Override
	public Configuracion obtenerConfiguracionLogisticaMonitoreoLog() {

		return facade.obtenerConfiguracionLMLog();
	}

	@Override
	public List<Articulo> listarArticulosPorOrden(String orden,
			String textoBusqueda, String categoria) throws NotFoundException {
		return facade.listarArticulosPorOrden(orden,textoBusqueda,categoria);
	}

}
